package site.isscloud.project.mapper;

import org.apache.ibatis.annotations.Param;
import site.isscloud.project.domain.PjAlarmRecord;
import java.util.List;
import java.util.Date;

/**
 * 告警记录Mapper接口
 */
public interface PjAlarmRecordMapper {
    /**
     * 查询告警记录
     */
    PjAlarmRecord selectPjAlarmRecordById(Long id);

    /**
     * 查询告警记录列表
     */
    List<PjAlarmRecord> selectPjAlarmRecordList(PjAlarmRecord pjAlarmRecord);

    /**
     * 新增告警记录
     */
    int insertPjAlarmRecord(PjAlarmRecord pjAlarmRecord);

    /**
     * 修改告警记录
     */
    int updatePjAlarmRecord(PjAlarmRecord pjAlarmRecord);

    /**
     * 删除告警记录
     */
    int deletePjAlarmRecordById(Long id);

    /**
     * 批量删除告警记录
     */
    int deletePjAlarmRecordByIds(Long[] ids);

    /**
     * 根据设备、通道、米标查询活跃告警
     */
    List<PjAlarmRecord> selectActiveAlarmsByDeviceChannelMeter(
            @Param("deviceNo") String deviceNo,
            @Param("chanel") Integer chanel,
            @Param("meterMark") Integer meterMark,
            @Param("alarmType") Integer alarmType);

    /**
     * 查询指定时间范围内的告警记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param alarmType 告警类型（可为空，为空时查询全部类型）
     */
    List<PjAlarmRecord> selectAlarmsByTimeRange(
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("alarmType") Integer alarmType);

    /**
     * 批量更新告警记录状态
     */
    int updateAlarmRecordStateBatch(
            @Param("ids") List<Long> ids,
            @Param("state") Integer state);

    /**
     * 根据事件ID查询关联的告警记录
     */
    List<PjAlarmRecord> selectAlarmsByEventIds(@Param("alarmIds") String alarmIds);

    List<PjAlarmRecord> selectActiveAlarmsByDeviceChannelMeter(
            @Param("deviceNo") String deviceNo,
            @Param("channel") Integer channel,
            @Param("meterMark") Integer meterMark,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime);
}